<?php

namespace App\lib;

trait MyCurl
{

    protected static $urlData = [
        // 百度地址转经纬度
        1 => 'http://api.map.baidu.com/cloudgc/v1',
        // 高德地址转经纬度
        2 => 'http://restapi.amap.com/v3/geocode/geo',
        // 百度经纬度转地址
        3 => 'http://api.map.baidu.com/cloudrgc/v1',
        // 高德经纬度转地址
        4 => 'http://restapi.amap.com/v3/geocode/regeo',
        // 百度坐标系转换接口
        5 => 'http://api.map.baidu.com/geoconv/v1/',
        // 高德IP定位
        6 => 'http://restapi.amap.com/v3/ip',
        // 高德经纬度转换
        7 => 'http://restapi.amap.com/v3/assistant/coordinate/convert',
        // 百度IP定位
        8 => 'http://api.map.baidu.com/location/ip',
        // 根据经纬度获取周边WiFi热点信息
        9 => 'http://apis.juhe.cn/wifi/local',
        // 根据城市获取WiFi热点信息
        10 => 'http://apis.juhe.cn/wifi/region',
    ];

    /**
     * 封装curl的调用接口，POST的请求方式。
     * @param $url
     * @param $data
     * @param int $timeout
     * @return bool|mixed
     */
    public static function curlPostRequest($url, $data, $timeout = 5){
        // 参数判断
        if(empty($url) || empty($data) || $timeout <=0){
            return false;
        }

        $ch = curl_init();//初始化curl
        curl_setopt($ch,CURLOPT_URL,$url);          //指定地址
        curl_setopt($ch, CURLOPT_HEADER, 0);        //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);          //post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//绑定数据
        curl_setopt($ch, CURLOPT_TIMEOUT, (int)$timeout);
        $res = curl_exec($ch);                      //运行curl
        curl_close($ch);
        // 返回数据
        return $res;
    }

    /**
     * 封装curl的调用接口，GET的请求方式。
     * @param $url
     * @param $data
     * @param int $timeout
     * @return bool|mixed
     */
    public static function curlGetRequest($url, $data, $timeout = 5){
        // 参数判断
        if(empty($url) || $timeout <= 0 || empty($data)){
            return false;
        }
        // 组合URL
        $url .= '?' . http_build_query($data);
        // 初始化
        $con = curl_init();
        // 设置选项，包括URL
        curl_setopt($con, CURLOPT_URL,urldecode($url));
        curl_setopt($con, CURLOPT_HEADER, false);
        curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
        curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);
        // 执行并获取信息
        $res = curl_exec($con);
        // 释放curl句柄
        curl_close($con);
        // 返回数据
        return $res;
    }


    /**
     * 请求接口返回内容
     * @param  string $url [请求的URL地址]
     * @param  string $params [请求的参数]
     * @param  int $isPost [是否采用POST形式]
     * @param  int $timeout [请求时间]
     * @return string
     */
    public function juHeCurl($url,$params,$isPost = 0,$timeout = 5){

        // 参数判断
        if(empty($url) || $timeout <= 0 || empty($params)){
            return false;
        }

        $httpInfo = array();
        // 初始化
        $ch = curl_init();

        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData' );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
        curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
        curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true);

        if($isPost){
            curl_setopt( $ch , CURLOPT_POST , true );
            curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
            curl_setopt( $ch , CURLOPT_URL , $url );
        }else{
            if($params){
                // 组合URL
                $url .= '?' . http_build_query($params);
                curl_setopt( $ch , CURLOPT_URL , $url );
            }else{
                curl_setopt( $ch , CURLOPT_URL , $url);
            }
        }

        $response = curl_exec( $ch );

        if ($response === FALSE) {
            //echo "cURL Error: " . curl_error($ch);
            return false;
        }

        $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
        $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
        curl_close( $ch );
        return $response;
    }

    /**
     * 数据API接口
     * @param type 获取api的key
     * @return string
     */
    public static function getBaseUrl($type){

        if(self::$urlData[$type]){
            return self::$urlData[$type];
        }

        return '';
    }
}
